#!/bin/bash

# Vhall Stream Saver 安装脚本
# 支持 macOS 和 Linux 系统

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检测操作系统
detect_os() {
    if [[ "$OSTYPE" == "darwin"* ]]; then
        OS="macos"
    elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
        OS="linux"
    else
        log_error "不支持的操作系统: $OSTYPE"
        exit 1
    fi
    log_info "检测到操作系统: $OS"
}

# 检查依赖
check_dependencies() {
    log_info "检查系统依赖..."
    
    # 检查 Node.js
    if ! command -v node &> /dev/null; then
        log_error "Node.js 未安装，请先安装 Node.js"
        exit 1
    fi
    
    local node_version=$(node --version | cut -d'v' -f2)
    log_success "Node.js 版本: $node_version"
    
    # 检查 npm
    if ! command -v npm &> /dev/null; then
        log_error "npm 未安装"
        exit 1
    fi
    
    log_success "npm 版本: $(npm --version)"
}

# 安装 yt-dlp
install_ytdlp() {
    log_info "检查 yt-dlp..."
    
    if command -v yt-dlp &> /dev/null; then
        log_success "yt-dlp 已安装，版本: $(yt-dlp --version)"
        return
    fi
    
    log_info "安装 yt-dlp..."
    
    if [[ "$OS" == "macos" ]]; then
        # macOS - 优先使用 Homebrew
        if command -v brew &> /dev/null; then
            brew install yt-dlp
        else
            log_warning "Homebrew 未安装，使用 pip 安装 yt-dlp"
            pip3 install yt-dlp
        fi
    elif [[ "$OS" == "linux" ]]; then
        # Linux - 使用 pip
        if command -v pip3 &> /dev/null; then
            pip3 install yt-dlp
        elif command -v pip &> /dev/null; then
            pip install yt-dlp
        else
            log_error "pip 未安装，请先安装 Python 和 pip"
            exit 1
        fi
    fi
    
    if command -v yt-dlp &> /dev/null; then
        log_success "yt-dlp 安装成功，版本: $(yt-dlp --version)"
    else
        log_error "yt-dlp 安装失败"
        exit 1
    fi
}

# 设置 Native Messaging Host
setup_native_host() {
    log_info "设置 Native Messaging Host..."
    
    local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
    local native_host_dir="$script_dir/native-host"
    local host_script="$native_host_dir/vhall-stream-saver-host.js"
    local manifest_file="$native_host_dir/manifest.json"
    
    # 确保 Native Host 脚本可执行
    chmod +x "$host_script"
    
    # 确定 Native Messaging Host 注册目录
    local native_messaging_dir
    if [[ "$OS" == "macos" ]]; then
        native_messaging_dir="$HOME/Library/Application Support/Google/Chrome/NativeMessagingHosts"
    elif [[ "$OS" == "linux" ]]; then
        native_messaging_dir="$HOME/.config/google-chrome/NativeMessagingHosts"
    fi
    
    # 创建目录
    mkdir -p "$native_messaging_dir"
    
    # 更新 manifest.json 中的路径
    local updated_manifest=$(cat "$manifest_file" | sed "s|\"path\": \"vhall-stream-saver-host.js\"|\"path\": \"$host_script\"|")
    
    # 写入更新后的 manifest
    echo "$updated_manifest" > "$native_messaging_dir/com.vhall.stream.saver.json"
    
    log_success "Native Messaging Host 配置完成"
    log_info "配置文件位置: $native_messaging_dir/com.vhall.stream.saver.json"
}

# 生成扩展包
build_extension() {
    log_info "准备扩展文件..."
    
    local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
    local build_dir="$script_dir/build"
    
    # 创建构建目录
    rm -rf "$build_dir"
    mkdir -p "$build_dir"
    
    # 复制扩展文件
    cp "$script_dir/manifest.json" "$build_dir/"
    cp "$script_dir/background.js" "$build_dir/"
    cp "$script_dir/popup.html" "$build_dir/"
    cp "$script_dir/popup.css" "$build_dir/"
    cp "$script_dir/popup.js" "$build_dir/"
    cp "$script_dir/options.html" "$build_dir/"
    cp "$script_dir/options.css" "$build_dir/"
    cp "$script_dir/options.js" "$build_dir/"
    cp "$script_dir/hls-downloader.js" "$build_dir/"
    cp -r "$script_dir/icons" "$build_dir/"
    
    log_success "扩展文件已准备完成"
    log_info "扩展目录: $build_dir"
}

# 显示安装完成信息
show_completion_info() {
    log_success "安装完成！"
    echo
    log_info "接下来的步骤："
    echo "1. 打开 Chrome 浏览器"
    echo "2. 访问 chrome://extensions/"
    echo "3. 开启「开发者模式」"
    echo "4. 点击「加载已解压的扩展程序」"
    echo "5. 选择目录: $(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/build"
    echo "6. 扩展安装完成后，需要更新 Native Host manifest 中的扩展 ID"
    echo
    log_warning "重要提示："
    echo "- 安装扩展后，请复制扩展 ID"
    echo "- 编辑文件: $HOME/.config/google-chrome/NativeMessagingHosts/com.vhall.stream.saver.json (Linux)"
    echo "- 或编辑文件: $HOME/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.vhall.stream.saver.json (macOS)"
    echo "- 将 EXTENSION_ID_PLACEHOLDER 替换为实际的扩展 ID"
    echo
    log_info "使用说明："
    echo "- 访问微吼直播页面"
    echo "- 点击扩展图标查看检测到的流"
    echo "- 选择下载质量并开始下载"
}

# 主函数
main() {
    echo "========================================"
    echo "    Vhall Stream Saver 安装程序"
    echo "========================================"
    echo
    
    detect_os
    check_dependencies
    install_ytdlp
    setup_native_host
    build_extension
    show_completion_info
}

# 运行主函数
main "$@"